package com.ct.application.commons.validator.valid;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

/**
 * 自定义的检验器，实现 ConstraintValidator接口
 * ConstraintValidator<A extends Annotation, T>接口上有两个类型:第一个是注解的类型,第二个是使用该注解的字段类型
 */
public class IntValueLimitConstraintValidator implements ConstraintValidator<IntValueLimit, Integer> {

    private Set<Integer> set = new HashSet<>();

    /**
     * 初始化方法
     *
     * @param listValue
     */
    @Override
    public void initialize(IntValueLimit listValue) {
        int[] values = listValue.intValues();
        for (int val : values) {
            set.add(val);
        }
    }

    /**
     * 判断是否检验成功
     * value:提交过来需要检验的值
     *
     * @return true:表示校验通过 false:表示校验失败
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
        if(value == null){
            return true;
        }
        return set.contains(value);
    }

}
